函数式编程中常用的函数(总结)

您所在的位置:网站首页 函数式编程 响应式编程的关系有哪些 函数式编程中常用的函数(总结)

函数式编程中常用的函数(总结)

2024-07-15 01:34| 来源: 网络整理| 查看: 265

一 函数式编程理解

1.函数式编程的含义:

函数式编程是一种编程的基本风格,就是构建程序的结构和元素的方式。函数式编程将计算过程看做是数学函数,也就是可以使用表达式编程。在函数的代码中,函数的返回值只以来传入函数的参数,因此使用相同的参数调用2次就会得到相同的结果。

如果说这段话很难理解,我觉得可以这么想,函数式编程就是一种函数,或者是一种结构,在该结构中,将函数和函数的参数都作为参数。

2.函数式编程具有的优点: a.便于进行单元测试 b.便于调试 c.适合并行执行

二 常用的函数式编程

1.Lambda表达式 Lambda表达式是一种匿名函数,它的结构如下

lambda 参数列表:函数返回值或表达式语句

Lambda表达式可以做如下功能: a.定义函数 例如如下代码:

getsum = lambda x,y : x+y

该结构和如下代码是一样的:

def getsum(x,y): return x+y

使用lambda表达式定义完成函数后,可以直接引用该函数,如下代码:

getsum = lambda x,y : x+y print(getsum(1,2))

结果会显示结果为:3

b.构建lambda表达式数组 定义Lambda表达式数组的结构为:

数组名=[(lambda 参数:函数返回值表达式1),((lambda 参数:函数返回值表达式2)···]

调用Lamda表达式数组的方式是:

数组名[索引](参数列表)

举例如下

myarr =[(lambda x,y: x+y),(lambda x,y:x*2+y*2),(lambda x,y:x*3+y*3)] print(myarr[0](1,1),myarr[1](2,3),myarr[2](1,4))

在上述代码中定义了一个lambda表达式数组,然后给每一个表达式赋值,得出的结果分别为:2 10 15 lambda表达式也可以直接作为函数的返回值,可写成 return lambda表达式 即可

2. map函数 map函数将指定序列中的元素作为参数依次被制定函数调用,并输出一个新的序列作为返回值,map函数的语法结构为:

结果序列 = map(函数名,[参数1的序列],[参数2的序列]···)

具体例子可看如下代码

#定义函数getsum() def getsum(x,y): return x+y # 使用map函数将getsum作为参数,并将两个序列的内的元素分别作为x和y的参数传递值 arrr = map(getsum,[1,2,3],[2,5,6]) for i in arrr: print(i)

经过计算,输出的结果分别是

3 7 9

可以将map函数与lambda表达式一起使用,代码如下:

arr2 = map(lambda x: x ** 2, [2,4,6,8]) for i in arr2: print(i)

输出结果为:

4 16 36 64

3.filter函数 filter函数可以对指定的序列进行过滤,该函数的语法结构如下:

filter(函数,序列)

在该语法结构中,filter内的函数返回值是布尔值False或者是True,序列值可以是列表、元组或者是字符串,返回的结果为函数判断为True对应的序列元素,具体看如下代码:

#定义一个求偶数的函数is_even def is_even(x): return x%2==0 #使用filter函数调用is_even函数 arr3 = filter(is_even,[1,2,3,4,5,6,7,8]) for i in arr3: print(i)

返回值为:

2 4 6 8

4.reduce函数 这个函数非常有意思,有点递归的感觉,引用的函数必须有两个参数,在引用序列的时候,序列中第一个和第二个元素作为参数输出结果作为新的第一个参数,第三个元素变成第二参数,以此结合。该函数从python3.0开始就不能直接在python内置函数内了,需要调用functools模块才可以。 函数的具体语法结构如下:

计算结果 = reduce(函数,序列)

具体示例代码如下:

#引入functools模块 import functools #定义一个简单的数相乘的函数求积 def com(x,y): return x*y result = functools.reduce(com,[1,2,3,4,5,6,7]) print(result)

输出结果为:5040 该函数的运行过程就是123*···*7=5040 可以理解为com(com(com(com(com(com(1,2),3),4),5),6),7)的结果 和如下的代码有类似:

def cum(x): if x==1: return 1 else: return cum(x-1)*x print(cum(7))

该代码的输出结果也是:5040 5.zip函数 zip函数就像它的名字一样是个压缩的用途,一般是将多个元组打包成一个列表进行运算,所以zip函数的参数都是元组。 压缩的示例代码如下:

a = [1,2,3] b = [3,4,5] c = [7,6,0] zippped = zip(a,b,c) for i in zippped: print(i)

输出结果为:

(1, 3, 7) (2, 4, 6) (3, 5, 0)

zip函数也可以把压缩的列表进行解压,在打包结果前加上*即可,示例代码如下:

a = [1,2,3] b = [3,4,5] c = [7,6,0] #将数据压缩,结果为zipped zippped = zip(a,b,c) #将zipped解压为uzipped uzipped = zip(*zippped) for j in uzipped: print(j)

输出结果为:

(1, 2, 3) (3, 4, 5) (7, 6, 0)


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3